/*
 * nipc.h
 *
 *  Created on: 20/10/2011
 *      Author: Normandia
 */

#ifndef NIPC_H_
#define NIPC_H_

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

#define TIPO_HANDSHAKE 0x0
#define TIPO_READSECTOR 0x1
#define TIPO_WRITESECTOR 0x2
#define TIPO_NONPLANNING 0x3
#define TIPO_INFO 0x4
#define TIPO_CONSOLE 0x5
#define TIPO_RAID_COPY 0x6
#define TIPO_END_SINCRO 0x7

#define MSG_NO_HANDSHAKE 0xFF
#define MSG_DISCO_DUPLICADO 0xFE
#define MSG_MAL_DISCO 0xFD

#define MAX_SIZE_MSG 550
#define INFO_MSG 3
#define PEDLOGNIPC 4

typedef struct {
	uint8_t tipo;
	uint16_t length;
	void* mensaje;
}__attribute__((__packed__)) T_MENSAJE;

typedef struct {
	uint32_t sector;
	uint64_t id_pedido;
}__attribute__((__packed__)) T_MSG_LECTURA;

typedef struct {
	uint64_t id_pedido;
	char data[512];
}__attribute__((__packed__)) T_MSG_LECTURA_RTA;

typedef struct {
	uint32_t sector;
	uint64_t id_pedido;
	char data[512];
}__attribute__((__packed__)) T_MSG_ESCRITURA;

typedef struct {
	uint64_t id_pedido;
}__attribute__((__packed__)) T_MSG_ESCRITURA_RTA;

void eliminarMensaje(T_MENSAJE* mensaje);
T_MENSAJE* generarMensaje(uint8_t tipo, uint16_t length, void* mensaje);
T_MENSAJE* decodificarMensaje(void* mensaje);

T_MENSAJE* mensaje_lectura(uint32_t sector, uint64_t id_pedido);
T_MENSAJE* mensaje_lectura_rta(uint64_t id_pedido, void* sector_buffer);
T_MENSAJE* mensaje_escritura(uint32_t sector, uint64_t id_pedido, void* sector_buffer);
T_MENSAJE* mensaje_RaidCopy(uint32_t sector, uint64_t id_pedido, void* sector_buffer);
T_MENSAJE* mensaje_escritura_rta(uint64_t id_pedido);

#endif /* NIPC_H_ */
